1
0
mirror of https://github.com/pavlobu/deskreen.git synced 2025-05-19 08:50:17 -07:00
2020-09-24 19:06:07 +03:00

167 lines
5.1 KiB
TypeScript

/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable jsx-a11y/click-events-have-key-events */
/* eslint-disable jsx-a11y/no-noninteractive-element-interactions */
/* eslint-disable jsx-a11y/alt-text */
import React, { useEffect, useState, useCallback } from 'react';
import { Card, H4, Icon } from '@blueprintjs/core';
import { createStyles, makeStyles } from '@material-ui/core/styles';
import { Row, Col } from 'react-flexbox-grid';
import isProduction from '../../../utils/isProduction';
const Fade = require('react-reveal/Fade');
const useStyles = makeStyles(() =>
createStyles({
root: {
display: 'flex',
flexWrap: 'wrap',
justifyContent: 'space-around',
overflow: 'hidden',
},
gridList: {
width: 500,
height: 450,
},
icon: {
color: 'rgba(255, 255, 255, 0.54)',
},
previewShareThumbContainer: {
marginBottom: '20px',
'&:hover': {
backgroundColor: 'rgba(19, 124, 189, 0.4)',
},
},
})
);
export default function PreviewGridList(props: any) {
const classes = useStyles();
const [showPreviewNamesMap, setShowPreviewNamesMap] = useState(new Map());
useEffect(() => {
const map = new Map();
props.screenSharingObjects.forEach((el: { id: string }) => {
map.set(el.id, false);
});
setShowPreviewNamesMap(map);
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
const onPreviewMouseEnter = useCallback(
(id) => {
const newShowPreviewNamesMap = new Map(showPreviewNamesMap);
[...newShowPreviewNamesMap.keys()].forEach((key) => {
newShowPreviewNamesMap.set(key, false);
});
newShowPreviewNamesMap.set(id, true);
setShowPreviewNamesMap(newShowPreviewNamesMap);
},
[showPreviewNamesMap, setShowPreviewNamesMap]
);
const onPreviewMouseLeave = useCallback(() => {
const newShowPreviewNamesMap = new Map(showPreviewNamesMap);
[...newShowPreviewNamesMap.keys()].forEach((key) => {
newShowPreviewNamesMap.set(key, false);
});
setShowPreviewNamesMap(newShowPreviewNamesMap);
}, [showPreviewNamesMap, setShowPreviewNamesMap]);
return (
<div
style={{
height: '90%',
display: 'flex',
flexDirection: 'row',
flexWrap: 'wrap',
}}
>
{[...showPreviewNamesMap.keys()].map((id) => {
return (
<Col xs={12} md={6} lg={3} key={id}>
<Card
interactive
elevation={2}
className={`preview-share-thumb-container ${classes.previewShareThumbContainer}`}
onClick={() => {
if (props.isEntireScreen) {
props.handleNextEntireScreen();
} else {
props.handleNextApplicationWindow();
}
}}
onMouseEnter={() => onPreviewMouseEnter(id)}
onMouseLeave={() => onPreviewMouseLeave()}
>
<div
style={{
height: '250px',
position: 'relative',
overflow: 'hidden',
borderRadius: '5px',
}}
>
<Row
middle="xs"
center="xs"
className="icon-or-preview-container"
>
<Icon
icon={props.isEntireScreen ? 'desktop' : 'application'}
iconSize={150}
color="#A7B6C2"
style={{
position: 'absolute',
top: 'calc(50% - 75px)',
left: 'calc(50% - 75px)',
}}
/>
</Row>
<Fade
when={showPreviewNamesMap.get(id)}
duration={isProduction() ? 300 : 0}
>
<div
style={{
height: '100%',
background:
'radial-gradient(circle closest-side, rgba(0,0,0,0.025), rgba(0,0,0,0.1)',
}}
>
<Fade
bottom
when={showPreviewNamesMap.get(id)}
duration={isProduction() ? 300 : 0}
>
<div
style={{
position: 'relative',
bottom: 'calc(-100% + 42px)',
width: '100%',
backgroundColor: 'rgba(0,0,0,0.4)',
padding: '10px',
}}
>
<H4
style={{
paddingBottom: '0px',
marginBottom: '0px',
color: 'white',
}}
>
Preview Name
</H4>
</div>
</Fade>
</div>
</Fade>
</div>
</Card>
</Col>
);
})}
</div>
);
}