import React, { useEffect, useState } from 'react'; import { remote } from 'electron'; import { Text, Card, Spinner } from '@blueprintjs/core'; import { Row, Col } from 'react-flexbox-grid'; import DesktopCapturerSources from '../../features/DesktopCapturerSourcesService'; const desktopCapturerSourcesService = remote.getGlobal( 'desktopCapturerSourcesService' ) as DesktopCapturerSources; class SharingSourcePreviewCardProps { sharingSourceID: string | undefined = ''; onClickCard? = () => {}; isChangeApperanceOnHover? = false; } export default function SharingSourcePreviewCard( props: SharingSourcePreviewCardProps ) { const { sharingSourceID, isChangeApperanceOnHover, onClickCard } = props; const [sourceImage, setSourceImage] = useState(''); const [sourceName, setSourceName] = useState(''); const [appIconSourceImage, setAppIconSourceImage] = useState(''); const [isHovered, setIsHovered] = useState(false); useEffect(() => { setTimeout(async () => { const sources = desktopCapturerSourcesService.getSourcesMap(); if (sources && sharingSourceID && sources.get(sharingSourceID)) { setSourceImage( sources.get(sharingSourceID)?.source.thumbnail.toDataURL() || '' ); if (sources.get(sharingSourceID)?.source.appIcon != null) { setAppIconSourceImage( sources.get(sharingSourceID)?.source.appIcon.toDataURL() || '' ); } setSourceName( sources.get(sharingSourceID)?.source.name || 'Failed to get source name...' ); } }, 1000); }, [sharingSourceID]); return ( onClickCard() : () => {}} style={{ height: '200px', minWidth: '250px', backgroundColor: isHovered && isChangeApperanceOnHover ? '#2B95D6' : 'rgba(0,0,0,0.0)', }} onMouseEnter={() => setIsHovered(true)} onMouseOver={() => setIsHovered(true)} onMouseLeave={() => setIsHovered(false)} > {sourceImage !== '' ? ( <> {appIconSourceImage !== '' ? ( ) : ( <> )} ) : ( )} {sourceName} ); }