@100mslive/roomkit-react 0.3.3-alpha.3 → 0.3.3-alpha.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.
Files changed (58) hide show
  1. package/dist/Accordion/Accordion.d.ts +0 -1
  2. package/dist/Accordion/index.d.ts +0 -1
  3. package/dist/{HLSView-BCIIVR2T.js → HLSView-VUANLYLS.js} +166 -331
  4. package/dist/HLSView-VUANLYLS.js.map +7 -0
  5. package/dist/IconButton/IconButton.d.ts +1 -1
  6. package/dist/Modal/Dialog.d.ts +1 -1
  7. package/dist/Prebuilt/IconButton.d.ts +3 -2
  8. package/dist/Prebuilt/components/Footer/ChatToggle.d.ts +1 -3
  9. package/dist/Prebuilt/components/HMSVideo/PlayPauseButton.d.ts +2 -2
  10. package/dist/Prebuilt/components/HMSVideo/{SeekControl.d.ts → SeekControls.d.ts} +2 -2
  11. package/dist/Prebuilt/components/HMSVideo/index.d.ts +11 -15
  12. package/dist/Prebuilt/components/Leave/LeaveAtoms.d.ts +2 -2
  13. package/dist/Prebuilt/components/RaiseHand.d.ts +1 -1
  14. package/dist/Prebuilt/layouts/WhiteboardView.d.ts +2 -0
  15. package/dist/Sheet/Sheet.d.ts +1 -1
  16. package/dist/{chunk-W47ZJGSD.js → chunk-5WTUTVRO.js} +540 -617
  17. package/dist/chunk-5WTUTVRO.js.map +7 -0
  18. package/dist/index.cjs.js +1426 -1686
  19. package/dist/index.cjs.js.map +4 -4
  20. package/dist/index.js +1 -1
  21. package/dist/meta.cjs.json +169 -248
  22. package/dist/meta.esbuild.json +180 -260
  23. package/package.json +7 -7
  24. package/src/Accordion/Accordion.tsx +4 -4
  25. package/src/IconButton/IconButton.tsx +7 -2
  26. package/src/Prebuilt/IconButton.tsx +10 -6
  27. package/src/Prebuilt/components/Chat/ChatBody.tsx +0 -10
  28. package/src/Prebuilt/components/Chat/ChatFooter.tsx +4 -2
  29. package/src/Prebuilt/components/ConferenceScreen.tsx +4 -1
  30. package/src/Prebuilt/components/Footer/ChatToggle.tsx +2 -2
  31. package/src/Prebuilt/components/Footer/Footer.tsx +4 -1
  32. package/src/Prebuilt/components/Footer/ParticipantList.tsx +1 -4
  33. package/src/Prebuilt/components/Footer/RoleAccordion.tsx +6 -6
  34. package/src/Prebuilt/components/Footer/WhiteboardToggle.tsx +3 -17
  35. package/src/Prebuilt/components/HMSVideo/HMSVideo.jsx +0 -1
  36. package/src/Prebuilt/components/HMSVideo/PlayPauseButton.tsx +2 -2
  37. package/src/Prebuilt/components/HMSVideo/{SeekControl.tsx → SeekControls.tsx} +2 -2
  38. package/src/Prebuilt/components/HMSVideo/VideoProgress.tsx +3 -7
  39. package/src/Prebuilt/components/HMSVideo/index.ts +4 -5
  40. package/src/Prebuilt/components/IconButtonWithOptions/IconButtonWithOptions.tsx +7 -7
  41. package/src/Prebuilt/components/MoreSettings/SplitComponents/DesktopOptions.tsx +1 -0
  42. package/src/Prebuilt/components/MoreSettings/SplitComponents/MwebOptions.tsx +5 -1
  43. package/src/Prebuilt/components/PreviousRoleInMetadata.tsx +1 -0
  44. package/src/Prebuilt/components/RaiseHand.tsx +1 -7
  45. package/src/Prebuilt/components/RoleChangeRequest/RoleChangeRequestModal.tsx +1 -0
  46. package/src/Prebuilt/components/VideoLayouts/GridLayout.tsx +4 -27
  47. package/src/Prebuilt/components/hooks/useCloseScreenshareWhiteboard.tsx +5 -13
  48. package/src/Prebuilt/components/hooks/{useMetadata.tsx → useMetadata.jsx} +8 -2
  49. package/src/Prebuilt/layouts/HLSView.jsx +78 -115
  50. package/src/Prebuilt/layouts/VideoStreamingSection.tsx +17 -1
  51. package/src/Prebuilt/layouts/WhiteboardView.tsx +69 -0
  52. package/dist/HLSView-BCIIVR2T.js.map +0 -7
  53. package/dist/Prebuilt/components/HMSVideo/PlayPauseSeekControls.d.ts +0 -14
  54. package/dist/Prebuilt/components/VideoLayouts/WhiteboardLayout.d.ts +0 -3
  55. package/dist/Prebuilt/components/hooks/useMetadata.d.ts +0 -8
  56. package/dist/chunk-W47ZJGSD.js.map +0 -7
  57. package/src/Prebuilt/components/HMSVideo/PlayPauseSeekControls.tsx +0 -158
  58. package/src/Prebuilt/components/VideoLayouts/WhiteboardLayout.tsx +0 -95
@@ -15,7 +15,7 @@ export const useMyMetadata = () => {
15
15
  const metaData = useHMSStore(selectPeerMetadata(localPeerId));
16
16
  const isHandRaised = useHMSStore(selectHasPeerHandRaised(localPeerId));
17
17
 
18
- const update = async (updatedFields: Record<string, any>) => {
18
+ const update = async updatedFields => {
19
19
  try {
20
20
  // get current state from store and merge updated fields
21
21
  const currentMetadata = vanillaStore.getState(selectPeerMetadata(localPeerId));
@@ -24,7 +24,6 @@ export const useMyMetadata = () => {
24
24
  } catch (error) {
25
25
  console.error('failed to update metadata ', updatedFields);
26
26
  }
27
- return false;
28
27
  };
29
28
 
30
29
  const toggleHandRaise = useCallback(async () => {
@@ -44,6 +43,12 @@ export const useMyMetadata = () => {
44
43
  }
45
44
  }, [metaData?.isBRBOn]); //eslint-disable-line
46
45
 
46
+ const setPrevRole = async role => {
47
+ await update({
48
+ prevRole: role,
49
+ });
50
+ };
51
+
47
52
  return {
48
53
  isHandRaised,
49
54
  isBRBOn: !!metaData?.isBRBOn,
@@ -51,5 +56,6 @@ export const useMyMetadata = () => {
51
56
  updateMetaData: update,
52
57
  toggleHandRaise,
53
58
  toggleBRB,
59
+ setPrevRole,
54
60
  };
55
61
  };
@@ -15,7 +15,7 @@ import {
15
15
  useHMSStore,
16
16
  useHMSVanillaStore,
17
17
  } from '@100mslive/react-sdk';
18
- import { ColoredHandIcon, GoLiveIcon } from '@100mslive/react-icons';
18
+ import { BackwardArrowIcon, ColoredHandIcon, ForwardArrowIcon, GoLiveIcon } from '@100mslive/react-icons';
19
19
  import { ChatToggle } from '../components/Footer/ChatToggle';
20
20
  import { HlsStatsOverlay } from '../components/HlsStatsOverlay';
21
21
  import { HMSVideoPlayer } from '../components/HMSVideo';
@@ -42,7 +42,7 @@ import { APP_DATA, EMOJI_REACTION_TYPE, POLL_STATE, POLL_VIEWS, SIDE_PANE_OPTION
42
42
  let hlsPlayer;
43
43
  const toastMap = {};
44
44
 
45
- const ToggleChat = ({ isFullScreen = false }) => {
45
+ const ToggleChat = () => {
46
46
  const { elements } = useRoomLayoutConferencingScreen();
47
47
  const sidepane = useHMSStore(selectAppData(APP_DATA.sidePane));
48
48
  const toggleChat = useSidepaneToggle(SIDE_PANE_OPTIONS.CHAT);
@@ -51,10 +51,7 @@ const ToggleChat = ({ isFullScreen = false }) => {
51
51
  const hmsActions = useHMSActions();
52
52
 
53
53
  useEffect(() => {
54
- match({ sidepane, isMobile, showChat, isFullScreen })
55
- .with({ isFullScreen: true }, () => {
56
- hmsActions.setAppData(APP_DATA.sidePane, '');
57
- })
54
+ match({ sidepane, isMobile, showChat })
58
55
  .with({ isMobile: true, showChat: true, sidepane: P.when(value => !value) }, () => {
59
56
  toggleChat();
60
57
  })
@@ -64,13 +61,12 @@ const ToggleChat = ({ isFullScreen = false }) => {
64
61
  .otherwise(() => {
65
62
  //do nothing
66
63
  });
67
- }, [sidepane, isMobile, toggleChat, showChat, hmsActions, isFullScreen]);
64
+ }, [sidepane, isMobile, toggleChat, showChat, hmsActions]);
68
65
  return null;
69
66
  };
70
67
  const HLSView = () => {
71
68
  const videoRef = useRef(null);
72
69
  const hlsViewRef = useRef();
73
- const { elements } = useRoomLayoutConferencingScreen();
74
70
  const hlsState = useHMSStore(selectHLSState);
75
71
  const enablHlsStats = useHMSStore(selectAppData(APP_DATA.hlsStats));
76
72
  const notification = useHMSNotifications(HMSNotificationTypes.POLL_STOPPED);
@@ -85,11 +81,7 @@ const HLSView = () => {
85
81
  const [hasCaptions, setHasCaptions] = useState(false);
86
82
  const [currentSelectedQuality, setCurrentSelectedQuality] = useState(null);
87
83
  const [isHlsAutoplayBlocked, setIsHlsAutoplayBlocked] = useState(false);
88
- const [hoverControlsVisible, setHoverControlsVisible] = useState({
89
- seekForward: false,
90
- pausePlay: false,
91
- seekBackward: false,
92
- });
84
+ const [isSeekEnabled, setIsSeekEnabled] = useState(false);
93
85
  const [isPaused, setIsPaused] = useState(false);
94
86
  const [show, toggle] = useToggle(false);
95
87
  const lastHlsUrl = usePrevious(hlsUrl);
@@ -101,8 +93,6 @@ const HLSView = () => {
101
93
  const controlsTimerRef = useRef();
102
94
  const [seekProgress, setSeekProgress] = useState(false);
103
95
  const isFullScreenSupported = screenfull.isEnabled;
104
- const toggleChat = useSidepaneToggle(SIDE_PANE_OPTIONS.CHAT);
105
- const showChat = !!elements?.chat;
106
96
 
107
97
  const isMobile = useMedia(config.media.md);
108
98
  const isLandscape = useIsLandscape();
@@ -243,19 +233,7 @@ const HLSView = () => {
243
233
  setIsVideoLive(isLive);
244
234
  };
245
235
 
246
- const playbackEventHandler = data => {
247
- setIsPaused(data.state === HLSPlaybackState.paused);
248
- setHoverControlsVisible({
249
- ...hoverControlsVisible,
250
- pausePlay: true,
251
- });
252
- setTimeout(() => {
253
- setHoverControlsVisible({
254
- ...hoverControlsVisible,
255
- pausePlay: false,
256
- });
257
- }, 2000);
258
- };
236
+ const playbackEventHandler = data => setIsPaused(data.state === HLSPlaybackState.paused);
259
237
  const captionEnabledEventHandler = isCaptionEnabled => {
260
238
  setIsCaptionEnabled(isCaptionEnabled);
261
239
  };
@@ -336,63 +314,28 @@ const HLSView = () => {
336
314
  };
337
315
  }, [controlsVisible, isFullScreen, seekProgress, qualityDropDownOpen]);
338
316
 
339
- const onSeekTo = useCallback(
340
- seek => {
341
- match({ isLandscape, isMobile, seek })
342
- .with({ seek: -10, isMobile: false, isLandscape: false }, () => {
343
- setHoverControlsVisible({ ...hoverControlsVisible, seekBackward: true });
344
- setTimeout(() => {
345
- setHoverControlsVisible({
346
- ...hoverControlsVisible,
347
- seekBackward: false,
348
- });
349
- }, 1000);
350
- })
351
- .with({ seek: 10, isMobile: false, isLandscape: false }, () => {
352
- setHoverControlsVisible({ ...hoverControlsVisible, seekForward: true });
353
- setTimeout(() => {
354
- setHoverControlsVisible({
355
- ...hoverControlsVisible,
356
- seekForward: false,
357
- });
358
- }, 1000);
359
- })
360
- .otherwise(() => null);
361
- hlsPlayer?.seekTo(videoRef.current?.currentTime + seek);
362
- },
363
- [hoverControlsVisible, isLandscape, isMobile],
364
- );
317
+ const onSeekTo = useCallback(seek => {
318
+ hlsPlayer?.seekTo(videoRef.current?.currentTime + seek);
319
+ }, []);
365
320
  const onDoubleClickHandler = useCallback(
366
321
  event => {
367
322
  if (!(isMobile || isLandscape) || hlsState?.variants[0]?.playlist_type !== HLSPlaylistType.DVR) {
368
323
  return;
369
324
  }
370
325
  const sidePercentage = (event.screenX * 100) / event.target.clientWidth;
326
+ setIsSeekEnabled(true);
371
327
  // there is space for pause/unpause button
372
328
  if (sidePercentage < 45) {
373
- setHoverControlsVisible({
374
- ...hoverControlsVisible,
375
- seekBackward: true,
376
- });
377
329
  onSeekTo(-10);
378
330
  } else {
379
- setHoverControlsVisible({
380
- ...hoverControlsVisible,
381
- seekForward: true,
382
- });
383
331
  onSeekTo(10);
384
332
  }
385
333
  setTimeout(() => {
386
- setHoverControlsVisible({
387
- ...hoverControlsVisible,
388
- seekForward: false,
389
- seekBackward: false,
390
- });
391
- }, 1000);
334
+ setIsSeekEnabled(false);
335
+ }, 200);
392
336
  },
393
- [hlsState?.variants, hoverControlsVisible, isLandscape, isMobile, onSeekTo],
337
+ [hlsState?.variants, isLandscape, isMobile, onSeekTo],
394
338
  );
395
-
396
339
  const onClickHandler = useCallback(async () => {
397
340
  match({ isMobile, isLandscape, playlist_type: hlsState?.variants[0]?.playlist_type })
398
341
  .with({ playlist_type: HLSPlaylistType.DVR, isMobile: false, isLandscape: false }, async () => {
@@ -413,7 +356,6 @@ const HLSView = () => {
413
356
  )
414
357
  .otherwise(() => null);
415
358
  }, [hlsState?.variants, isLandscape, isMobile, isPaused]);
416
-
417
359
  const onHoverHandler = useCallback(
418
360
  event => {
419
361
  event.preventDefault();
@@ -481,7 +423,6 @@ const HLSView = () => {
481
423
  justify="center"
482
424
  css={{
483
425
  flex: isLandscape ? '2 1 0' : '1 1 0',
484
- transition: 'all 0.3s ease-in-out',
485
426
  '&:fullscreen': {
486
427
  '& video': {
487
428
  height: 'unset !important',
@@ -543,37 +484,53 @@ const HLSView = () => {
543
484
  }}
544
485
  >
545
486
  <>
546
- {!(isMobile || isLandscape) && (
547
- <Flex
548
- align="center"
549
- justify="between"
550
- css={{
551
- position: 'absolute',
552
- bg: '#00000066',
553
- display: 'inline-flex',
554
- gap: '$2',
555
- zIndex: 1,
556
- size: '100%',
557
- }}
558
- >
559
- {!showLoader && hlsState?.variants[0]?.playlist_type === HLSPlaylistType.DVR && (
560
- <HMSVideoPlayer.PlayPauseSeekControls.Overlay
561
- isPaused={isPaused}
562
- showControls={controlsVisible}
563
- hoverControlsVisible={hoverControlsVisible}
564
- />
565
- )}
566
- </Flex>
567
- )}
568
487
  {isMobile || isLandscape ? (
569
488
  <>
570
- {!showLoader && hlsState?.variants[0]?.playlist_type === HLSPlaylistType.DVR && (
571
- <HMSVideoPlayer.PlayPauseSeekControls.Overlay
572
- isPaused={isPaused}
573
- showControls={controlsVisible}
574
- hoverControlsVisible={hoverControlsVisible}
575
- />
576
- )}
489
+ <Flex
490
+ align="center"
491
+ justify="center"
492
+ css={{
493
+ position: 'absolute',
494
+ bg: '#00000066',
495
+ display: 'inline-flex',
496
+ gap: '$2',
497
+ zIndex: 1,
498
+ size: '100%',
499
+ visibility: controlsVisible ? `` : `hidden`,
500
+ opacity: controlsVisible ? `1` : '0',
501
+ }}
502
+ >
503
+ {!showLoader && hlsState?.variants[0]?.playlist_type === HLSPlaylistType.DVR && (
504
+ <>
505
+ <HMSVideoPlayer.Seeker
506
+ title="backward"
507
+ css={{
508
+ visibility: isSeekEnabled ? `` : `hidden`,
509
+ opacity: isSeekEnabled ? `1` : '0',
510
+ }}
511
+ >
512
+ <BackwardArrowIcon width={32} height={32} />
513
+ </HMSVideoPlayer.Seeker>
514
+ <Box
515
+ css={{
516
+ bg: 'rgba(0, 0, 0, 0.6)',
517
+ r: '$round',
518
+ }}
519
+ >
520
+ <HMSVideoPlayer.PlayPauseButton isPaused={isPaused} width={48} height={48} />
521
+ </Box>
522
+ <HMSVideoPlayer.Seeker
523
+ title="forward"
524
+ css={{
525
+ visibility: isSeekEnabled ? `` : `hidden`,
526
+ opacity: isSeekEnabled ? `1` : '0',
527
+ }}
528
+ >
529
+ <ForwardArrowIcon width={32} height={32} />
530
+ </HMSVideoPlayer.Seeker>
531
+ </>
532
+ )}
533
+ </Flex>
577
534
  <Flex
578
535
  ref={controlsRef}
579
536
  direction="column"
@@ -596,16 +553,7 @@ const HLSView = () => {
596
553
  }}
597
554
  >
598
555
  <HMSVideoPlayer.Controls.Right>
599
- {(isLandscape || (isMobile && isFullScreen)) && showChat && (
600
- <ChatToggle
601
- onClick={() => {
602
- if (isFullScreen) {
603
- toggle();
604
- }
605
- toggleChat();
606
- }}
607
- />
608
- )}
556
+ {isLandscape && <ChatToggle />}
609
557
  {hasCaptions && !isHlsAutoplayBlocked && <HLSCaptionSelector isEnabled={isCaptionEnabled} />}
610
558
  {hlsViewRef.current && availableLayers.length > 0 && !isHlsAutoplayBlocked ? (
611
559
  <HLSQualitySelector
@@ -658,7 +606,23 @@ const HLSView = () => {
658
606
  <>
659
607
  {hlsState?.variants[0]?.playlist_type === HLSPlaylistType.DVR ? (
660
608
  <>
661
- <HMSVideoPlayer.PlayPauseSeekControls.Button isPaused={isPaused} onSeekTo={onSeekTo} />
609
+ <HMSVideoPlayer.Seeker
610
+ onClick={() => {
611
+ onSeekTo(-10);
612
+ }}
613
+ title="backward"
614
+ >
615
+ <BackwardArrowIcon width={20} height={20} />
616
+ </HMSVideoPlayer.Seeker>
617
+ <HMSVideoPlayer.PlayPauseButton isPaused={isPaused} />
618
+ <HMSVideoPlayer.Seeker
619
+ onClick={() => {
620
+ onSeekTo(10);
621
+ }}
622
+ title="forward"
623
+ >
624
+ <ForwardArrowIcon width={20} height={20} />
625
+ </HMSVideoPlayer.Seeker>
662
626
  {!isVideoLive ? <HMSVideoPlayer.Duration /> : null}
663
627
  </>
664
628
  ) : null}
@@ -667,8 +631,7 @@ const HLSView = () => {
667
631
  )}
668
632
  <IconButton
669
633
  css={{ px: '$2' }}
670
- onClick={async e => {
671
- e.stopPropagation();
634
+ onClick={async () => {
672
635
  await hlsPlayer?.seekToLivePosition();
673
636
  setIsVideoLive(true);
674
637
  }}
@@ -727,7 +690,7 @@ const HLSView = () => {
727
690
  </HMSVideoPlayer.Root>
728
691
  </Flex>
729
692
  </HMSPlayerContext.Provider>
730
- <ToggleChat isFullScreen={isFullScreen} />
693
+ <ToggleChat />
731
694
  {isMobile && !isFullScreen && <HLSViewTitle />}
732
695
  </Flex>
733
696
  );
@@ -5,7 +5,14 @@ import {
5
5
  HLSLiveStreamingScreen_Elements,
6
6
  } from '@100mslive/types-prebuilt';
7
7
  import { match } from 'ts-pattern';
8
- import { selectIsConnectedToRoom, selectLocalPeerRoleName, useHMSActions, useHMSStore } from '@100mslive/react-sdk';
8
+ import {
9
+ selectIsConnectedToRoom,
10
+ selectLocalPeerRoleName,
11
+ selectPeerScreenSharing,
12
+ selectWhiteboard,
13
+ useHMSActions,
14
+ useHMSStore,
15
+ } from '@100mslive/react-sdk';
9
16
  // @ts-ignore: No implicit Any
10
17
  import FullPageProgress from '../components/FullPageProgress';
11
18
  import { GridLayout } from '../components/VideoLayouts/GridLayout';
@@ -17,6 +24,7 @@ import { PDFView } from './PDFView';
17
24
  import SidePane from './SidePane';
18
25
  // @ts-ignore: No implicit Any
19
26
  import { WaitingView } from './WaitingView';
27
+ import { WhiteboardView } from './WhiteboardView';
20
28
  import {
21
29
  usePDFConfig,
22
30
  useUrlToEmbed,
@@ -42,6 +50,8 @@ export const VideoStreamingSection = ({
42
50
  }) => {
43
51
  const localPeerRole = useHMSStore(selectLocalPeerRoleName);
44
52
  const isConnected = useHMSStore(selectIsConnectedToRoom);
53
+ const peerSharing = useHMSStore(selectPeerScreenSharing);
54
+ const isWhiteboardOpen = useHMSStore(selectWhiteboard)?.open;
45
55
 
46
56
  const hmsActions = useHMSActions();
47
57
  const waitingViewerRole = useWaitingViewerRole();
@@ -79,6 +89,12 @@ export const VideoStreamingSection = ({
79
89
  ViewComponent = <PDFView />;
80
90
  } else if (urlToIframe) {
81
91
  ViewComponent = <EmbedView />;
92
+ } else if (peerSharing) {
93
+ // screen share should take preference over whiteboard
94
+ //@ts-ignore
95
+ ViewComponent = <GridLayout {...(elements as DefaultConferencingScreen_Elements)?.video_tile_layout?.grid} />;
96
+ } else if (isWhiteboardOpen) {
97
+ ViewComponent = <WhiteboardView />;
82
98
  } else {
83
99
  //@ts-ignore
84
100
  ViewComponent = <GridLayout {...(elements as DefaultConferencingScreen_Elements)?.video_tile_layout?.grid} />;
@@ -0,0 +1,69 @@
1
+ import React, { useEffect, useMemo } from 'react';
2
+ import { useMedia } from 'react-use';
3
+ import { selectPeers, selectWhiteboard, useHMSStore, useWhiteboard } from '@100mslive/react-sdk';
4
+ import { SecondaryTiles } from '../components/SecondaryTiles';
5
+ import { ProminenceLayout } from '../components/VideoLayouts/ProminenceLayout';
6
+ import { config as cssConfig } from '../../';
7
+ import { Box } from '../../Layout';
8
+ // @ts-ignore: No implicit Any
9
+ import { useSetAppDataByKey } from '../components/AppData/useUISettings';
10
+ import { APP_DATA } from '../common/constants';
11
+
12
+ const EmbedComponent = () => {
13
+ const isMobile = useMedia(cssConfig.media.md);
14
+ const { iframeRef } = useWhiteboard(isMobile);
15
+
16
+ return (
17
+ <Box
18
+ css={{
19
+ mx: '$8',
20
+ flex: '3 1 0',
21
+ '@lg': {
22
+ flex: '2 1 0',
23
+ display: 'flex',
24
+ alignItems: 'center',
25
+ },
26
+ }}
27
+ >
28
+ <iframe
29
+ title="Whiteboard View"
30
+ ref={iframeRef}
31
+ style={{
32
+ width: '100%',
33
+ height: '100%',
34
+ border: 0,
35
+ borderRadius: '0.75rem',
36
+ }}
37
+ allow="autoplay; clipboard-write;"
38
+ referrerPolicy="no-referrer"
39
+ />
40
+ </Box>
41
+ );
42
+ };
43
+
44
+ export const WhiteboardView = () => {
45
+ const peers = useHMSStore(selectPeers);
46
+ const whiteboard = useHMSStore(selectWhiteboard);
47
+ const [, setActiveScreenSharePeer] = useSetAppDataByKey(APP_DATA.activeScreensharePeerId);
48
+
49
+ const smallTilePeers = useMemo(() => {
50
+ const smallTilePeers = peers.filter(peer => peer.id !== whiteboard?.owner);
51
+ return smallTilePeers;
52
+ }, [peers, whiteboard?.owner]);
53
+
54
+ useEffect(() => {
55
+ setActiveScreenSharePeer(whiteboard?.owner || '');
56
+ return () => {
57
+ setActiveScreenSharePeer('');
58
+ };
59
+ }, [whiteboard?.owner, setActiveScreenSharePeer]);
60
+
61
+ return (
62
+ <ProminenceLayout.Root>
63
+ <ProminenceLayout.ProminentSection>
64
+ <EmbedComponent />
65
+ </ProminenceLayout.ProminentSection>
66
+ <SecondaryTiles peers={smallTilePeers} />
67
+ </ProminenceLayout.Root>
68
+ );
69
+ };