import React, { useEffect, useState } from 'react'; import { ipcRenderer } from 'electron'; import { Text, Card, Spinner } from '@blueprintjs/core'; import { Row, Col } from 'react-flexbox-grid'; import { IpcEvents } from '../../main/IpcEvents.enum'; 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 = await ipcRenderer.invoke( IpcEvents.GetDesktopCapturerServiceSourcesMap ); if (sources && sharingSourceID && sources[sharingSourceID]) { setSourceImage( ((sources[sharingSourceID]?.source.thumbnail as unknown) as string) || '' ); if (sources[sharingSourceID]?.source.appIcon != null) { setAppIconSourceImage( ((sources[sharingSourceID]?.source.appIcon as unknown) as string) || '' ); } setSourceName( sources[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} ); }