// @flow import 'scss/component/_swipeable-drawer.scss'; import { lazyImport } from 'util/lazyImport'; import { useIsMobile } from 'effects/use-screensize'; import { Menu, MenuList, MenuButton, MenuItem } from '@reach/menu-button'; import FileTitleSection from 'component/fileTitleSection'; import LivestreamLink from 'component/livestreamLink'; import React from 'react'; import { PRIMARY_PLAYER_WRAPPER_CLASS } from 'page/file/view'; import FileRenderInitiator from 'component/fileRenderInitiator'; import LivestreamIframeRender from './iframe-render'; import * as ICONS from 'constants/icons'; import SwipeableDrawer from 'component/swipeableDrawer'; import { DrawerExpandButton } from 'component/swipeableDrawer/view'; import LivestreamMenu from 'component/livestreamChatLayout/livestream-menu'; import Icon from 'component/common/icon'; import CreditAmount from 'component/common/credit-amount'; import { getTipValues } from 'util/livestream'; const LivestreamChatLayout = lazyImport(() => import('component/livestreamChatLayout' /* webpackChunkName: "chat" */)); const VIEW_MODES = { CHAT: 'chat', SUPERCHAT: 'sc', }; type Props = { activeStreamUri: boolean | string, claim: ?StreamClaim, hideComments: boolean, isCurrentClaimLive: boolean, release: any, showLivestream: boolean, showScheduledInfo: boolean, uri: string, superChats: Array, }; export default function LivestreamLayout(props: Props) { const { activeStreamUri, claim, hideComments, isCurrentClaimLive, release, showLivestream, showScheduledInfo, uri, superChats, } = props; const isMobile = useIsMobile(); const [showChat, setShowChat] = React.useState(undefined); const [superchatsHidden, setSuperchatsHidden] = React.useState(false); const [chatViewMode, setChatViewMode] = React.useState(VIEW_MODES.CHAT); if (!claim || !claim.signing_channel) return null; const { name: channelName, claim_id: channelClaimId } = claim.signing_channel; return ( <>
{isMobile && isCurrentClaimLive ? (
{/* Mobile needs to handle the livestream player like any video player */}
) : ( )}
{hideComments && !showScheduledInfo && (
{channelName ? __('%channel% has disabled chat for this stream. Enjoy the stream!', { channel: channelName }) : __('This channel has disabled chat for this stream. Enjoy the stream!')}
)} {!activeStreamUri && !showScheduledInfo && !isCurrentClaimLive && (
{channelName ? __("%channelName% isn't live right now, but the chat is! Check back later to watch the stream.", { channelName, }) : __("This channel isn't live right now, but the chat is! Check back later to watch the stream.")}
)} {activeStreamUri && ( )} {isMobile && !hideComments && ( setShowChat(!showChat)} title={ setChatViewMode(mode)} /> } actions={ setSuperchatsHidden(!superchatsHidden)} isMobile /> } > setShowChat(!showChat)} /> )}
); } const ChatModeSelector = (chatSelectorProps: any) => { const { superChats, chatViewMode, setChatViewMode } = chatSelectorProps; const { superChatsFiatAmount, superChatsLBCAmount } = getTipValues(superChats); if (!superChats) { return __('Live Chat'); } return ( {chatViewMode === VIEW_MODES.CHAT ? __('Live Chat') : __('Super Chats')} setChatViewMode(VIEW_MODES.CHAT)}> {__('Live Chat')} setChatViewMode(VIEW_MODES.SUPERCHAT)}>
/ {__('Tipped')}
); };