From 3d81110f562adf19edca9460bd996198dd93e6fe Mon Sep 17 00:00:00 2001 From: Cyril Date: Thu, 7 May 2026 11:50:47 +0200 Subject: [PATCH] =?UTF-8?q?=E2=99=BB=EF=B8=8F(refactor)=20inject=20side=20?= =?UTF-8?q?panel=20store=20via=20context=20for=20PiP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Keep pipLayoutStore separate from layoutStore; shared components use context. --- .../src/features/pip/components/PipView.tsx | 17 ++++++++++++++--- .../components/controls/PipOptionsMenuItems.tsx | 3 +-- .../pip/components/layouts/PipFocusLayout.tsx | 3 --- .../pip/components/layouts/PipGridLayout.tsx | 3 +-- .../livekit/components/ParticipantTile.tsx | 4 ---- .../livekit/components/ParticipantTileFocus.tsx | 10 ++++------ .../rooms/livekit/components/SidePanel.tsx | 6 +++--- .../controls/Options/EffectsMenuItem.tsx | 6 +++--- .../rooms/livekit/hooks/useSidePanel.ts | 9 ++++++++- 9 files changed, 34 insertions(+), 27 deletions(-) diff --git a/src/frontend/src/features/pip/components/PipView.tsx b/src/frontend/src/features/pip/components/PipView.tsx index d73d7238..77611611 100644 --- a/src/frontend/src/features/pip/components/PipView.tsx +++ b/src/frontend/src/features/pip/components/PipView.tsx @@ -3,7 +3,10 @@ import { supportsScreenSharing } from '@livekit/components-core' import { useTranslation } from 'react-i18next' import { styled } from '@/styled-system/jsx' import { SidePanel } from '@/features/rooms/livekit/components/SidePanel' -import { useSidePanel } from '@/features/rooms/livekit/hooks/useSidePanel' +import { + SidePanelStoreProvider, + useSidePanel, +} from '@/features/rooms/livekit/hooks/useSidePanel' import { pipLayoutStore } from '../stores/pipLayoutStore' import { useEscapeDismiss } from '../hooks/useEscapeDismiss' import { usePipKeyboardShortcuts } from '../hooks/usePipKeyboardShortcuts' @@ -17,12 +20,20 @@ import { PipConnectionStateToast } from './notifications/PipConnectionStateToast import { PipReactionPortals } from './PipReactionPortals' export const PipView = () => { + return ( + + + + ) +} + +const PipViewContent = () => { const browserSupportsScreenSharing = supportsScreenSharing() const { t } = useTranslation('rooms', { keyPrefix: 'options.items.pictureInPicture', }) const containerRef = useRef(null) - const { isSidePanelOpen, closePanel } = useSidePanel(pipLayoutStore) + const { isSidePanelOpen, closePanel } = useSidePanel() // Escape closes the side panel instead of the whole PiP window. useEscapeDismiss(containerRef, isSidePanelOpen, closePanel) @@ -53,7 +64,7 @@ export const PipView = () => { - + diff --git a/src/frontend/src/features/pip/components/controls/PipOptionsMenuItems.tsx b/src/frontend/src/features/pip/components/controls/PipOptionsMenuItems.tsx index d27dcb47..9df40581 100644 --- a/src/frontend/src/features/pip/components/controls/PipOptionsMenuItems.tsx +++ b/src/frontend/src/features/pip/components/controls/PipOptionsMenuItems.tsx @@ -4,7 +4,6 @@ import { FeedbackMenuItem } from '@/features/rooms/livekit/components/controls/O import { EffectsMenuItem } from '@/features/rooms/livekit/components/controls/Options/EffectsMenuItem' import { SupportMenuItem } from '@/features/rooms/livekit/components/controls/Options/SupportMenuItem' import { PictureInPictureMenuItem } from '@/features/rooms/livekit/components/controls/Options/PictureInPictureMenuItem' -import { pipLayoutStore } from '@/features/pip/stores/pipLayoutStore' import { PipOverflowItems } from './PipOverflowItems' import type { CollapsibleControl } from '../PipControlBar' @@ -34,7 +33,7 @@ export const PipOptionsMenuItems = ({ )} - + diff --git a/src/frontend/src/features/pip/components/layouts/PipFocusLayout.tsx b/src/frontend/src/features/pip/components/layouts/PipFocusLayout.tsx index dae79ecb..0bd2997c 100644 --- a/src/frontend/src/features/pip/components/layouts/PipFocusLayout.tsx +++ b/src/frontend/src/features/pip/components/layouts/PipFocusLayout.tsx @@ -2,7 +2,6 @@ import { memo } from 'react' import type { TrackReferenceOrPlaceholder } from '@livekit/components-core' import { styled } from '@/styled-system/jsx' import { ParticipantTile } from '@/features/rooms/livekit/components/ParticipantTile' -import { pipLayoutStore } from '../../stores/pipLayoutStore' import { getTrackKey } from '../../utils/pipTrackSelection' type PipFocusLayoutProps = { @@ -26,7 +25,6 @@ export const PipFocusLayout = memo( {thumbnailTrack && ( @@ -34,7 +32,6 @@ export const PipFocusLayout = memo( )} diff --git a/src/frontend/src/features/pip/components/layouts/PipGridLayout.tsx b/src/frontend/src/features/pip/components/layouts/PipGridLayout.tsx index 4d4d81fa..ae84f44b 100644 --- a/src/frontend/src/features/pip/components/layouts/PipGridLayout.tsx +++ b/src/frontend/src/features/pip/components/layouts/PipGridLayout.tsx @@ -2,7 +2,6 @@ import { memo, useMemo, useRef } from 'react' import type { TrackReferenceOrPlaceholder } from '@livekit/components-core' import { styled } from '@/styled-system/jsx' import { ParticipantTile } from '@/features/rooms/livekit/components/ParticipantTile' -import { pipLayoutStore } from '../../stores/pipLayoutStore' import { usePipElementSize } from '../../hooks/usePipElementSize' import { usePipFlipAnimations } from '../../hooks/usePipFlipAnimations' import { computePipGridLayout } from '../../utils/pipGrid' @@ -47,7 +46,7 @@ export const PipGridLayout = memo(({ tracks }: PipGridLayoutProps) => { {tracks.map((track, index) => ( - + ))} diff --git a/src/frontend/src/features/rooms/livekit/components/ParticipantTile.tsx b/src/frontend/src/features/rooms/livekit/components/ParticipantTile.tsx index bb902116..629e9980 100644 --- a/src/frontend/src/features/rooms/livekit/components/ParticipantTile.tsx +++ b/src/frontend/src/features/rooms/livekit/components/ParticipantTile.tsx @@ -27,7 +27,6 @@ import { HStack } from '@/styled-system/jsx' import { MutedMicIndicator } from './MutedMicIndicator' import { ParticipantPlaceholder } from './ParticipantPlaceholder' import { ParticipantTileFocus } from './ParticipantTileFocus' -import type { SidePanelStore } from '../hooks/useSidePanel' import { FullScreenShareWarning } from './FullScreenShareWarning' import { ParticipantName } from './ParticipantName' import { getParticipantName } from '@/features/rooms/utils/getParticipantName' @@ -53,7 +52,6 @@ export function TrackRefContextIfNeeded( interface ParticipantTileExtendedProps extends ParticipantTileProps { disableMetadata?: boolean - sidePanelStore?: SidePanelStore } export const ParticipantTile: ( @@ -68,7 +66,6 @@ export const ParticipantTile: ( onParticipantClick, disableSpeakingIndicator, disableMetadata, - sidePanelStore, ...htmlProps }: ParticipantTileExtendedProps, ref @@ -238,7 +235,6 @@ export const ParticipantTile: ( )} diff --git a/src/frontend/src/features/rooms/livekit/components/ParticipantTileFocus.tsx b/src/frontend/src/features/rooms/livekit/components/ParticipantTileFocus.tsx index 1c80bfcc..605314ca 100644 --- a/src/frontend/src/features/rooms/livekit/components/ParticipantTileFocus.tsx +++ b/src/frontend/src/features/rooms/livekit/components/ParticipantTileFocus.tsx @@ -16,7 +16,7 @@ import { import { useTranslation } from 'react-i18next' import { TrackReferenceOrPlaceholder } from '@livekit/components-core' import { useEffect, useRef, useState } from 'react' -import { type SidePanelStore, useSidePanel } from '../hooks/useSidePanel' +import { useSidePanel } from '../hooks/useSidePanel' import { useFullScreen } from '../hooks/useFullScreen' import { Participant, Track } from 'livekit-client' import { MuteAlertDialog } from './MuteAlertDialog' @@ -74,9 +74,9 @@ const FocusButton = ({ ) } -const EffectsButton = ({ store }: { store?: SidePanelStore }) => { +const EffectsButton = () => { const { t } = useTranslation('rooms', { keyPrefix: 'participantTileFocus' }) - const { isEffectsOpen, toggleEffects } = useSidePanel(store) + const { isEffectsOpen, toggleEffects } = useSidePanel() return (