import React, { type ReactNode, useCallback, useContext } from 'react';
import { PresentationMode } from 'react-native-theoplayer';
import { ActionButton } from './actionbutton/ActionButton';
import { PlayerContext } from '../util/PlayerContext';
import { PipExitSvg } from './svg/PipExitSvg';
import { PipEnterSvg } from './svg/PipEnterSvg';
import { usePresentationMode } from '../../hooks/usePresentationMode';
import type { ButtonBaseProps } from './ButtonBaseProps';
import { TestIDs } from '../../utils/TestIDs';
export interface PipButtonProps extends ButtonBaseProps {
/**
* The icon components used in the button.
*/
icon?: { enter: ReactNode; exit: ReactNode };
}
/**
* The default button to enable picture-in-picture for the `react-native-theoplayer` UI.
*/
export function PipButton(props: PipButtonProps) {
const { icon } = props;
const { player, ui } = useContext(PlayerContext);
const presentationMode = usePresentationMode();
const togglePip = useCallback(() => {
switch (player.presentationMode) {
case 'inline':
case 'fullscreen':
ui.enterPip_();
break;
case 'picture-in-picture':
// eslint-disable-next-line react-hooks/immutability
player.presentationMode = PresentationMode.inline;
break;
}
}, [player, ui]);
const enterSvg: ReactNode = icon?.enter ?? ;
const exitSvg: ReactNode = icon?.exit ?? ;
return (
);
}