Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import { faCircle } from '@fortawesome/free-solid-svg-icons'
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
import React, { useState } from 'react'
import { Overlay, Tooltip } from 'react-bootstrap'
import { useTranslation } from 'react-i18next'
import { CategoryType } from '../types'
import { useUpdateIndicatorViewModel } from './update-indicator.viewmodel'
interface UpdateIndicatorProps {
category: CategoryType
updateInterval: number
}
const UpdateIndicator: React.FC<UpdateIndicatorProps> = ({ category, updateInterval }) => {
const [showTooltip, setShowTooltip] = useState(false)
const { t } = useTranslation('common')
const target = React.useRef(null)
const { secondsSinceUpdate, getStatusColor } = useUpdateIndicatorViewModel(category)
return (
<div
className="position-absolute"
style={{
top: 0,
right: '40px',
padding: '10px',
zIndex: 10
}}
>
<div
ref={target}
onMouseEnter={() => setShowTooltip(true)}
onMouseLeave={() => setShowTooltip(false)}
style={{ cursor: 'pointer' }}
>
<FontAwesomeIcon
icon={faCircle}
className={getStatusColor(updateInterval)}
size="sm"
/>
</div>
<Overlay target={target.current} show={showTooltip} placement="bottom">
<Tooltip id="update-tooltip">
{t('device.box.lastUpdate', { seconds: secondsSinceUpdate })}
</Tooltip>
</Overlay>
</div>
)
}
export default UpdateIndicator