import Warning from '@mui/icons-material/Warning'; import Divider from '@mui/material/Divider'; import ListItemIcon from '@mui/material/ListItemIcon'; import ListItemText from '@mui/material/ListItemText'; import Menu, { type MenuProps } from '@mui/material/Menu'; import MenuItem from '@mui/material/MenuItem'; import React, { FC, useEffect, useState } from 'react'; import globalize from 'scripts/globalize'; import { playbackManager } from 'components/playback/playbackmanager'; import { pluginManager } from 'components/pluginManager'; import type { PlayTarget } from 'types/playTarget'; import PlayTargetIcon from '../../PlayTargetIcon'; interface RemotePlayMenuProps extends MenuProps { onMenuClose: () => void } export const ID = 'app-remote-play-menu'; const RemotePlayMenu: FC = ({ anchorEl, open, onMenuClose }) => { // TODO: Add other checks for support (Android app, secure context, etc) const isChromecastPluginLoaded = !!pluginManager.plugins.find(plugin => plugin.id === 'chromecast'); const [ playbackTargets, setPlaybackTargets ] = useState([]); const onPlayTargetClick = (target: PlayTarget) => { playbackManager.trySetActivePlayer(target.playerName, target); onMenuClose(); }; useEffect(() => { const fetchPlaybackTargets = async () => { setPlaybackTargets( await playbackManager.getTargets() ); }; if (open) { fetchPlaybackTargets() .catch(err => { console.error('[AppRemotePlayMenu] unable to get playback targets', err); }); } }, [ open, setPlaybackTargets ]); return ( {!isChromecastPluginLoaded && ([ {globalize.translate('GoogleCastUnsupported')} , ])} {playbackTargets.map(target => ( onPlayTargetClick(target)} > ))} ); }; export default RemotePlayMenu;