/
PrintButton.jsx
73 lines (59 loc) · 1.69 KB
/
PrintButton.jsx
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import React, { useState, useEffect } from 'react'
import PropTypes from 'prop-types'
import { useClient } from 'cozy-client'
import { useWebviewIntent } from 'cozy-intent'
import Button from '../../Buttons'
import IconButton from '../../IconButton'
import Icon from '../../Icon'
import { print } from '../../ActionsMenu/Actions/print'
const PrintButton = ({ file, variant }) => {
const [isPrintAvailable, setIsPrintAvailable] = useState(false)
const client = useClient()
const webviewIntent = useWebviewIntent()
const {
icon: printIcon,
label: printLabel,
action: printAction,
displayCondition: printDisplayCondition
} = print()
const isPDFDoc = file.mime === 'application/pdf'
const showPrintButton = printDisplayCondition && isPDFDoc && isPrintAvailable
const handleClick = async () =>
await printAction([file], { client, webviewIntent })
useEffect(() => {
const init = async () => {
const isAvailable =
(await webviewIntent?.call('isAvailable', 'print')) ?? true
setIsPrintAvailable(isAvailable)
}
init()
}, [webviewIntent])
if (!showPrintButton) return null
if (variant === 'button') {
return (
<Button
variant="secondary"
aria-label={printLabel}
label={<Icon icon={printIcon} />}
onClick={handleClick}
/>
)
}
return (
<IconButton
className="u-white"
aria-label={printLabel}
onClick={handleClick}
>
<Icon icon={printIcon} />
</IconButton>
)
}
PrintButton.propTypes = {
file: PropTypes.object.isRequired,
variant: PropTypes.oneOf(['default', 'button'])
}
PrintButton.defaultProps = {
variant: 'default'
}
export default PrintButton